package ar.com.tallerdos.smartdinner.activity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.TextView;
import ar.com.tallerdos.smartdinner.R;
import ar.com.tallerdos.smartdinner.adapter.PedidoExpandableAdapter;
import ar.com.tallerdos.smartdinner.business.ComidaBusiness;
import ar.com.tallerdos.smartdinner.business.PedidoBusiness;
import ar.com.tallerdos.smartdinner.business.ProductoBusiness;
import ar.com.tallerdos.smartdinner.model.Comida;
import ar.com.tallerdos.smartdinner.model.Comida.ComidaEstado;
import ar.com.tallerdos.smartdinner.model.Mesa;
import ar.com.tallerdos.smartdinner.model.Pedido;
import ar.com.tallerdos.smartdinner.model.Pedido.PedidoEstado;
import ar.com.tallerdos.smartdinner.model.Producto;

public class ComidaActivity extends Activity {
    public final static String ID_PEDIDO_SELECCIONADO = "ar.com.tallerdos.smartdinner.activity.ComidaActivity.ID_PEDIDO_SELECCIONADO";

    private PedidoExpandableAdapter listAdapter;
    private ExpandableListView expListView;
    private Comida comida;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.comida_activity);

	//cargarComidas();
	Intent intent = getIntent();

	int idComida = intent.getIntExtra(ComidasLista.COMIDA_SELECCIONADA, 0);
	comida = ComidaBusiness.findById(idComida);

	expListView = (ExpandableListView) findViewById(R.id.pedidosListado);
	expListView.setEmptyView(findViewById(android.R.id.empty));
	if (comida.getPedidos() == null) {
	    comida.setPedidos(new ArrayList<Pedido>());
	}
	try {
	    @SuppressWarnings("unused")
	    List<Pedido> lp = (List<Pedido>) comida.getPedidos();
	} catch (ClassCastException e) {
	    List<Pedido> lp = new ArrayList<Pedido>();
	    lp.addAll(comida.getPedidos());
	    comida.setPedidos(lp);
	}
	listAdapter = new PedidoExpandableAdapter(this, 
		(List<Pedido>) comida.getPedidos());
	
	try {
	    expListView.setAdapter(listAdapter);
	} catch (Exception e) {
	    e.printStackTrace();
	}

	recalcularTotal();
	TextView header = (TextView) findViewById(R.id.comidaHeader);

	header.setText(comida.toString());
    }

    private void cargarComidas() {
	this.comida = new Comida();

	this.comida.setCantidadComensales(3);
	this.comida.setEstado(ComidaEstado.ABIERTA);
	this.comida.setId(1);

	Mesa mesa = new Mesa();
	mesa.setCapacidadMaxima(4);
	mesa.setId(1);
	mesa.setCodigo(10);
	List<Mesa> mesas = new ArrayList<Mesa>();
	mesas.add(mesa);
	this.comida.setMesas(mesas);

	Pedido pedido1 = new Pedido();
	pedido1.setCantidad(2);
	pedido1.setComida(comida);
	pedido1.setEstado(PedidoEstado.Nuevo);
	pedido1.setId(1);

	Pedido pedido2 = new Pedido();
	pedido2.setCantidad(3);
	pedido2.setComida(comida);
	pedido2.setEstado(PedidoEstado.Nuevo);
	pedido2.setId(2);

	Producto producto1 = null;
	Producto producto2 = null;
	
	producto1 = ProductoBusiness.findById(1);
	producto2 = ProductoBusiness.findById(2);


	pedido1.setProducto(producto1);
	pedido2.setProducto(producto2);

	List<Pedido> pedidos = new ArrayList<Pedido>();
	pedidos.add(pedido1);
	pedidos.add(pedido2);

	comida.setPedidos(pedidos);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
	// Inflate the menu; this adds items to the action bar if it is present.
	getMenuInflater().inflate(R.menu.main_menu, menu);
	return true;
    }

    public void addItem(View view) {
	// Intent intent = new Intent(this, ListViewExampleActivity.class);
	Intent intent = new Intent(this, RubrosLista.class);
	startActivity(intent);

    }

    public void agregarPedido(View view) {
	Intent intent = new Intent(this, RubrosLista.class);
	startActivityForResult(intent, 1);
	// startActivity(intent);
    }

    public void recalcularTotal() {
	TextView totalTextView = (TextView) findViewById(R.id.totalValor);
	totalTextView.setText("$ " + this.comida.getTotalDosDecimales());
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

	if (requestCode == 1) {

	    if (resultCode == RESULT_OK) {
		int productoId = data.getIntExtra("result", 0);
		if (productoId != 0) {
		    Pedido pedido = new Pedido();
		    Producto producto = ProductoBusiness.findById(productoId);
		    pedido.setProducto(producto);
		    pedido.setComida(this.comida);

		    PedidoBusiness.create(pedido);
		    this.comida.getPedidos().add(pedido);
		    recalcularTotal();
		    listAdapter.notifyDataSetChanged();
		}
	    }
	    if (resultCode == RESULT_CANCELED) {
		// Write your code if there's no result
	    }
	}
    }
    
    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }
}
